#pragma once
#include "crypto/algorithms/ialgorithm/FAQCipherAlgorithm.h"
#include "crypto/algorithms/ialgorithm/FAQSignAlgorithm.h"
#include "crypto/algorithms/ialgorithm/FAQKeyAlgorithm.h"
#include "yzrutil.h"

namespace yzrilyzr_crypto{
	ECLASS(NullAlgorithm, public FAQCipherAlgorithm, public FAQSignAlgorithm, public FAQKeyAlgorithm){
	public:
	yzrilyzr_array::ByteArray sign(const yzrilyzr_array::ByteArray & hash)override{
		return yzrilyzr_array::ByteArray(0);
	}
	bool verify(const yzrilyzr_array::ByteArray &hash, const yzrilyzr_array::ByteArray & sign)override{
		return true;
	}
	void setKey(const FAQKey &key)override{}
	yzrilyzr_lang::String getAlgorithmName()const override{
		return "Null";
	}
	std::shared_ptr<FAQAlgorithm> newInstance()const override{
		return std::make_shared<NullAlgorithm>();
	}
	yzrilyzr_array::ByteArray encrypt(const yzrilyzr_array::ByteArray & input)override{
		return const_cast<yzrilyzr_array::ByteArray & >(input);
	}
	yzrilyzr_array::ByteArray decrypt(const yzrilyzr_array::ByteArray & input)override{
		return const_cast<yzrilyzr_array::ByteArray &>(input);
	}
	};
}